iT邦幫忙

2024 iThome 鐵人賽

DAY 22
0

今天,我們將深入探討如何使用 GrafanaPrometheus 中收集到的數據進行可視化。雖然 Prometheus 本身已經提供了查詢和簡單的圖表功能,但使用 Grafana 可以讓我們更直觀地展示和分析這些數據,提升監控的效率和靈活性。


什麼是 Grafana?

https://ithelp.ithome.com.tw/upload/images/20241006/20169492tEyO0pNXBF.png
圖片來源

Grafana 是一個開源的數據可視化和監控平台,專門用於整合來自不同數據源的數據,並將這些數據以可視化圖表的方式呈現。它可以與多種數據源(例如 PrometheusElasticsearchMySQL 等)整合,並且提供動態篩選、圖表自定義、儀表板分享等強大功能。對於 DevOps 團隊而言,Grafana 是日常系統監控與數據分析的核心工具之一。


為什麼使用 Grafana ?

雖然 Prometheus 本身提供了 Web UI 來查詢和展示數據,但它在可視化方面有一些局限性。以下是選擇 Grafana 而非直接使用 Prometheus Web UI 的原因:

Prometheus Web UI 的局限性

  • 缺乏儀表板功能:Prometheus Web UI 無法集中展示多個指標數據,用戶需要單獨查詢每個指標,這在大型系統中不夠高效。
  • 圖表選擇有限:Prometheus Web UI 的可視化功能較為基礎,沒有提供多樣化的圖表選項,如儀表、熱圖等。
  • 無告警整合:雖然 Prometheus 提供告警功能,但 Web UI 沒有直接顯示告警狀態,這讓告警管理變得不直觀。

Grafana 的優勢

相比 Prometheus Web UI,Grafana 擁有以下優勢:

  • 集中化儀表板:Grafana 支援將多個監控指標整合到同一個儀表板上,同時監控多個服務或應用,讓DevOps 團隊可以即時看到系統的運行情況,能更高效地監控全系統狀態。
  • 豐富的圖表選項:Grafana 提供豐富的圖表類型,包含儀表、熱圖、條形圖等,這讓數據的展示更加直觀和多樣。
  • 動態數據篩選:用戶可以在儀表板上動態調整時間範圍、數據篩選條件,靈活地分析不同時段、不同維度的數據。
  • 告警與儀表板整合:Grafana 可以將 Prometheus 的告警狀態與儀表板整合,讓告警信息與相關指標數據直接呈現在一起,方便進行問題排查與處理。

https://ithelp.ithome.com.tw/upload/images/20241006/20169492aR9tUjfxfm.png
圖片來源


使用 Grafana

在 Kubernetes 叢集中,我們可以通過 Helm 快速安裝 Grafana

安裝 Grafana

在 Kubernetes 叢集中,我們可以通過 Helm 來安裝 Grafana。

首先,添加 Grafana 的 Helm repository:

helm repo add grafana https://grafana.github.io/helm-charts
helm repo update

接著,使用 Helm 安裝 Grafana:

helm install grafana grafana/grafana

Grafana Web UI

訪問 Grafana 的 Web UI

kubectl port-forward service/grafana 3000:80

# 或按照安裝完的提示,Get the Grafana URL to visit by running these commands in the same shell:
export POD_NAME=$(kubectl get pods --namespace default -l "app.kubernetes.io/name=grafana,app.kubernetes.io/instance=grafana" -o jsonpath="{.items[0].metadata.name}")
kubectl --namespace default port-forward $POD_NAME 3000

這樣,Grafana 的 Web 介面就可以在 http://localhost:3000http://127.0.0.1:3000上訪問。

初始登錄時,使用預設的帳號和密碼:

  • 帳號: admin
  • 用以下命令得到密碼
# Get your 'admin' user password by running:
kubectl get secret --namespace default grafana -o jsonpath="{.data.admin-password}" | base64 --decode ; echo

整合 Prometheus 到 Grafana

在 Grafana 中,我們可以將 Prometheus 設置為數據源,並開始建立可視化儀表板。

  1. 登錄 Grafana Web UI 後,點擊左側的選單, "Connections > Data sources"
    https://ithelp.ithome.com.tw/upload/images/20241006/20169492g8g7jyYsot.png

  2. 點擊 "Add data source",然後選擇 Prometheus
    https://ithelp.ithome.com.tw/upload/images/20241006/20169492u9nOiMiosZ.png

  3. URL 欄位填寫 Prometheus 的地址,一般預設是 http://prometheus-server.default.svc.cluster.local:9090

  4. 點擊 Save & Test 來保存設置,並確認與 Prometheus 成功連接。

如果在這個步驟遇到問題:

https://ithelp.ithome.com.tw/upload/images/20241006/20169492gsDX7N5ZMR.png

用以下命令檢查服務的連接埠

kubectl get svc -n default

https://ithelp.ithome.com.tw/upload/images/20241006/20169492xjB9U5fWFE.png

根據結果,我的Prometheus 服務 prometheus-server 使用的是 80 port,而不是 Prometheus 默認的 9090 port。這可能是導致 Grafana 無法連接的原因。我將URL改為 http://prometheus-server.default.svc.cluster.local:80 ,就可以成功添加了~

https://ithelp.ithome.com.tw/upload/images/20241006/201694921Ioq4tnanD.png


建立 Grafana 儀表板

創建一個新的儀表板

  1. 點擊 Grafana 介面右側的 "+" 圖示,選擇 "New dashboard"
  2. 點擊 "Add visualization",這裡我們可以根據需要選擇不同的圖表類型,如折線圖、儀表、條形圖等。
  3. 使用 Query 查詢 Prometheus 中的數據。例如,我在 Metric 中填入 container_cpu_usage_seconds_total ,再按 ”Run query” 或圖表右上方的重整圖示,就能看到結果。
  4. 右側下拉選單,選擇合適的圖表類型,並調整其他圖表設定。
  5. 保存儀表板,並將其分享給團隊其他成員。

https://ithelp.ithome.com.tw/upload/images/20241006/20169492lsK1YxpB93.png

視覺化

可以創建一個專門用於 Kubernetes 監控各項 metric 的儀表板,例如:

  • CPU 使用率container_cpu_usage_seconds_total
  • 記憶體使用率container_memory_usage_bytes
  • Pod 狀態kube_pod_status_phase

這些面板能幫助我們及時掌握 Kubernetes 叢集和應用的運行情況。


監控對 DevOps 的影響

監控 是 DevOps 的重要支柱之一,它讓團隊能夠即時洞察系統的運行狀態,並及時應對潛在的問題。使用 Prometheus 和 Grafana 的組合,DevOps 團隊可以更好地理解應用的性能、預測資源需求,並確保系統的穩定性與可擴展性。

  1. 持續可見性:提供即時的運行狀況,確保系統中的問題能被早期發現和解決。
  2. 性能優化:長期的數據收集能幫助團隊識別瓶頸,進而優化系統性能。
  3. 自動化響應:配合告警與自動化擴展策略,實現系統在負載增加時自動調整,減少人力監控的負擔。

結語&預告

今天我們學習了如何使用 Grafana 進行 Prometheus 數據的可視化和告警設置。Grafana 能讓我們更直觀地理解系統的運行狀態,並在問題發生時即時通知團隊進行應對。這樣的監控與可視化功能,對於 DevOps 團隊來說是不可或缺的利器~


參考文件


上一篇
Day21 - 使用 Prometheus 進行基礎監控
下一篇
Day23 - Infrastructure as Code (IaC) 基礎架構即程式碼
系列文
DevOps菜鳥的30天實踐挑戰:從 CI/CD Pipeline 到雲端佈署30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言